{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "romance-harris",
   "metadata": {},
   "source": [
    "# Computing lag features\n",
    "\n",
    "[Feature Engineering for Time Series Forecasting](https://www.trainindata.com/p/feature-engineering-for-forecasting)\n",
    "\n",
    "In this notebook we show how we can use Pandas to compute lag features. We then show how to compute lag features using Feature-engine.\n",
    "\n",
    "We will work with a monthly retail sales dataset (found [here](https://raw.githubusercontent.com/facebook/prophet/master/examples/example_retail_sales.csv)).\n",
    "\n",
    "For instructions on how to download, prepare, and store the dataset, refer to notebook number 1, in the folder \"01-Datasets\" from this repo.\n",
    "\n",
    "## Data Set Synopsis\n",
    "\n",
    "The timeseries is collected between January 1992 and May 2016.\n",
    "\n",
    "It consists of a single series of monthly values representing sales volumes. "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "blank-trigger",
   "metadata": {},
   "source": [
    "# Resources"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "fuzzy-tomorrow",
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "\n",
    "sns.set_context(\"talk\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "military-airport",
   "metadata": {},
   "source": [
    "# Load data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "protecting-trouble",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Load retail sales dataset \n",
    "df = pd.read_csv(\n",
    "    \"../Datasets/example_retail_sales.csv\",\n",
    "    parse_dates=[\"ds\"],\n",
    "    index_col=[\"ds\"],\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "portuguese-python",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>y</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ds</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1992-01-01</th>\n",
       "      <td>146376</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1992-02-01</th>\n",
       "      <td>147079</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1992-03-01</th>\n",
       "      <td>159336</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1992-04-01</th>\n",
       "      <td>163669</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1992-05-01</th>\n",
       "      <td>170068</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 y\n",
       "ds                \n",
       "1992-01-01  146376\n",
       "1992-02-01  147079\n",
       "1992-03-01  159336\n",
       "1992-04-01  163669\n",
       "1992-05-01  170068"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "close-warren",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 0, 'Time')"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(figsize=[10, 5])\n",
    "ax = df.plot(y=\"y\", marker=\".\", figsize=[10, 5], legend=None, ax=ax)\n",
    "ax.set_title('Retail sales')\n",
    "ax.set_ylabel('Sales')\n",
    "ax.set_xlabel('Time')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "breeding-damages",
   "metadata": {},
   "source": [
    "# Compute lag of a column in Pandas"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "radical-ensemble",
   "metadata": {},
   "source": [
    "The `shift` method of a dataframe allows us to create lag features\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "altered-macro",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>y</th>\n",
       "      <th>y_lag_2</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ds</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1992-01-01</th>\n",
       "      <td>146376</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1992-02-01</th>\n",
       "      <td>147079</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1992-03-01</th>\n",
       "      <td>159336</td>\n",
       "      <td>146376.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1992-04-01</th>\n",
       "      <td>163669</td>\n",
       "      <td>147079.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1992-05-01</th>\n",
       "      <td>170068</td>\n",
       "      <td>159336.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 y   y_lag_2\n",
       "ds                          \n",
       "1992-01-01  146376       NaN\n",
       "1992-02-01  147079       NaN\n",
       "1992-03-01  159336  146376.0\n",
       "1992-04-01  163669  147079.0\n",
       "1992-05-01  170068  159336.0"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_ = df.copy()  # Create a copy to preserve the original dataframe\n",
    "                 # for later use.\n",
    "\n",
    "lag = 2  # As the time series is uniformly spaced by months we can\n",
    "         # specify the lag in terms of the number of periods. In\n",
    "         # this case the period is in unit of months.\n",
    "\n",
    "df_[f\"y_lag_{lag}\"] = df_[\"y\"].shift(periods=lag)\n",
    "df_.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "comparable-glance",
   "metadata": {},
   "source": [
    "You can also specify the `freq` of the time index so that the correct time duration is lagged rather than simply the number of rows."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "attached-department",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>y</th>\n",
       "      <th>y_lag_2</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ds</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1992-01-01</th>\n",
       "      <td>146376</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1992-02-01</th>\n",
       "      <td>147079</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1992-03-01</th>\n",
       "      <td>159336</td>\n",
       "      <td>146376.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1992-04-01</th>\n",
       "      <td>163669</td>\n",
       "      <td>147079.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1992-05-01</th>\n",
       "      <td>170068</td>\n",
       "      <td>159336.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 y   y_lag_2\n",
       "ds                          \n",
       "1992-01-01  146376       NaN\n",
       "1992-02-01  147079       NaN\n",
       "1992-03-01  159336  146376.0\n",
       "1992-04-01  163669  147079.0\n",
       "1992-05-01  170068  159336.0"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_ = df.copy()  # Create a copy to preserve the original dataframe\n",
    "                 # for later use\n",
    "\n",
    "lag = 2  # As the time series is uniformly spaced by months we can\n",
    "         # specify the lag in terms of the number of periods. In\n",
    "         # this case the period is in unit of months.\n",
    "\n",
    "df_[f\"y_lag_{lag}\"] = df_[\"y\"].shift(periods=lag, freq=\"MS\")\n",
    "df_.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "administrative-chicken",
   "metadata": {},
   "source": [
    "You can also specify the `freq` of the time index and append the number of periods to shift by at the start of the string, omitting the `period` argument entirely."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "supposed-sympathy",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>y</th>\n",
       "      <th>y_lag_2MS</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ds</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1992-01-01</th>\n",
       "      <td>146376</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1992-02-01</th>\n",
       "      <td>147079</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1992-03-01</th>\n",
       "      <td>159336</td>\n",
       "      <td>146376.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1992-04-01</th>\n",
       "      <td>163669</td>\n",
       "      <td>147079.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1992-05-01</th>\n",
       "      <td>170068</td>\n",
       "      <td>159336.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 y  y_lag_2MS\n",
       "ds                           \n",
       "1992-01-01  146376        NaN\n",
       "1992-02-01  147079        NaN\n",
       "1992-03-01  159336   146376.0\n",
       "1992-04-01  163669   147079.0\n",
       "1992-05-01  170068   159336.0"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_ = df.copy()  # Create a copy to preserve the original dataframe\n",
    "                 # for later use\n",
    "\n",
    "freq = \"2MS\"\n",
    "df_[f\"y_lag_{freq}\"] = df_[\"y\"].shift(freq=freq)\n",
    "df_.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "detailed-victorian",
   "metadata": {},
   "source": [
    "# Compute lag features using Feature-engine"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "dependent-aquarium",
   "metadata": {},
   "outputs": [],
   "source": [
    "from feature_engine.timeseries.forecasting import LagFeatures"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "victorian-pressing",
   "metadata": {},
   "source": [
    "Feature engine can compute multiple lags at the same time."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "underlying-editor",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>y</th>\n",
       "      <th>y_lag_1MS</th>\n",
       "      <th>y_lag_2MS</th>\n",
       "      <th>y_lag_3MS</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ds</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1992-01-01</th>\n",
       "      <td>146376</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1992-02-01</th>\n",
       "      <td>147079</td>\n",
       "      <td>146376.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1992-03-01</th>\n",
       "      <td>159336</td>\n",
       "      <td>147079.0</td>\n",
       "      <td>146376.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1992-04-01</th>\n",
       "      <td>163669</td>\n",
       "      <td>159336.0</td>\n",
       "      <td>147079.0</td>\n",
       "      <td>146376.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1992-05-01</th>\n",
       "      <td>170068</td>\n",
       "      <td>163669.0</td>\n",
       "      <td>159336.0</td>\n",
       "      <td>147079.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-01</th>\n",
       "      <td>400928</td>\n",
       "      <td>518253.0</td>\n",
       "      <td>444507.0</td>\n",
       "      <td>444959.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-02-01</th>\n",
       "      <td>413554</td>\n",
       "      <td>400928.0</td>\n",
       "      <td>518253.0</td>\n",
       "      <td>444507.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-03-01</th>\n",
       "      <td>460093</td>\n",
       "      <td>413554.0</td>\n",
       "      <td>400928.0</td>\n",
       "      <td>518253.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-04-01</th>\n",
       "      <td>450935</td>\n",
       "      <td>460093.0</td>\n",
       "      <td>413554.0</td>\n",
       "      <td>400928.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-05-01</th>\n",
       "      <td>471421</td>\n",
       "      <td>450935.0</td>\n",
       "      <td>460093.0</td>\n",
       "      <td>413554.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>293 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                 y  y_lag_1MS  y_lag_2MS  y_lag_3MS\n",
       "ds                                                 \n",
       "1992-01-01  146376        NaN        NaN        NaN\n",
       "1992-02-01  147079   146376.0        NaN        NaN\n",
       "1992-03-01  159336   147079.0   146376.0        NaN\n",
       "1992-04-01  163669   159336.0   147079.0   146376.0\n",
       "1992-05-01  170068   163669.0   159336.0   147079.0\n",
       "...            ...        ...        ...        ...\n",
       "2016-01-01  400928   518253.0   444507.0   444959.0\n",
       "2016-02-01  413554   400928.0   518253.0   444507.0\n",
       "2016-03-01  460093   413554.0   400928.0   518253.0\n",
       "2016-04-01  450935   460093.0   413554.0   400928.0\n",
       "2016-05-01  471421   450935.0   460093.0   413554.0\n",
       "\n",
       "[293 rows x 4 columns]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lag_transformer = LagFeatures(variables=[\"y\"], freq=[\"1MS\", \"2MS\", \"3MS\"])\n",
    "lag_transformer.fit_transform(df)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "global-joining",
   "metadata": {},
   "source": [
    "# Compute lag of multiple time series using Pandas\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "arbitrary-location",
   "metadata": {},
   "source": [
    "Let's look at an example where we have multiple time-series defined over different time periods (e.g., sales volumes for different countries, but the sales period may start at different times in different countries).\n",
    "\n",
    "We create a toy dataset for this example."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "vocational-planner",
   "metadata": {},
   "outputs": [],
   "source": [
    "time1 = pd.date_range(start=\"2000-01-01\", end=\"2000-01-06\")\n",
    "y1 = np.random.rand(len(time1))\n",
    "time2 = pd.date_range(start=\"2000-01-03\", end=\"2000-01-10\")\n",
    "y2 = np.random.rand(len(time2))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "japanese-canberra",
   "metadata": {},
   "source": [
    "It is typical to find the data represented as follows:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "superior-dinner",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>y</th>\n",
       "      <th>country</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ds</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2000-01-01</th>\n",
       "      <td>0.870109</td>\n",
       "      <td>UK</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-02</th>\n",
       "      <td>0.496001</td>\n",
       "      <td>UK</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-03</th>\n",
       "      <td>0.708407</td>\n",
       "      <td>UK</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-04</th>\n",
       "      <td>0.313938</td>\n",
       "      <td>UK</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-05</th>\n",
       "      <td>0.111558</td>\n",
       "      <td>UK</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-06</th>\n",
       "      <td>0.883858</td>\n",
       "      <td>UK</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-03</th>\n",
       "      <td>0.289137</td>\n",
       "      <td>France</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-04</th>\n",
       "      <td>0.338983</td>\n",
       "      <td>France</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-05</th>\n",
       "      <td>0.284201</td>\n",
       "      <td>France</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-06</th>\n",
       "      <td>0.189095</td>\n",
       "      <td>France</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-07</th>\n",
       "      <td>0.118102</td>\n",
       "      <td>France</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-08</th>\n",
       "      <td>0.402535</td>\n",
       "      <td>France</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-09</th>\n",
       "      <td>0.678827</td>\n",
       "      <td>France</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-10</th>\n",
       "      <td>0.296832</td>\n",
       "      <td>France</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   y country\n",
       "ds                          \n",
       "2000-01-01  0.870109      UK\n",
       "2000-01-02  0.496001      UK\n",
       "2000-01-03  0.708407      UK\n",
       "2000-01-04  0.313938      UK\n",
       "2000-01-05  0.111558      UK\n",
       "2000-01-06  0.883858      UK\n",
       "2000-01-03  0.289137  France\n",
       "2000-01-04  0.338983  France\n",
       "2000-01-05  0.284201  France\n",
       "2000-01-06  0.189095  France\n",
       "2000-01-07  0.118102  France\n",
       "2000-01-08  0.402535  France\n",
       "2000-01-09  0.678827  France\n",
       "2000-01-10  0.296832  France"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_1 = pd.DataFrame({\"ds\": time1, \"y\": y1, \"country\": \"UK\"})\n",
    "df_2 = pd.DataFrame({\"ds\": time2, \"y\": y2, \"country\": \"France\"})\n",
    "df = pd.concat([df_1, df_2])\n",
    "df.sort_values(by=[\"country\", \"ds\"]) # Sort to ensure the time series groups \n",
    "                                     # are contiguous. \n",
    "df.set_index(\"ds\", inplace=True)\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "golden-clinton",
   "metadata": {},
   "source": [
    "This representation means that multiple time-series at different time stamps are stored in the same columns `y` and `ds`."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "unusual-sterling",
   "metadata": {},
   "source": [
    "Let's look at potential mistakes in trying to use `shift` for this dataframe"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "valued-mitchell",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>y</th>\n",
       "      <th>country</th>\n",
       "      <th>y_lag</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ds</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2000-01-01</th>\n",
       "      <td>0.870109</td>\n",
       "      <td>UK</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-02</th>\n",
       "      <td>0.496001</td>\n",
       "      <td>UK</td>\n",
       "      <td>0.870109</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-03</th>\n",
       "      <td>0.708407</td>\n",
       "      <td>UK</td>\n",
       "      <td>0.496001</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-04</th>\n",
       "      <td>0.313938</td>\n",
       "      <td>UK</td>\n",
       "      <td>0.708407</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-05</th>\n",
       "      <td>0.111558</td>\n",
       "      <td>UK</td>\n",
       "      <td>0.313938</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-06</th>\n",
       "      <td>0.883858</td>\n",
       "      <td>UK</td>\n",
       "      <td>0.111558</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-03</th>\n",
       "      <td>0.289137</td>\n",
       "      <td>France</td>\n",
       "      <td>0.883858</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-04</th>\n",
       "      <td>0.338983</td>\n",
       "      <td>France</td>\n",
       "      <td>0.289137</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-05</th>\n",
       "      <td>0.284201</td>\n",
       "      <td>France</td>\n",
       "      <td>0.338983</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-06</th>\n",
       "      <td>0.189095</td>\n",
       "      <td>France</td>\n",
       "      <td>0.284201</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-07</th>\n",
       "      <td>0.118102</td>\n",
       "      <td>France</td>\n",
       "      <td>0.189095</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-08</th>\n",
       "      <td>0.402535</td>\n",
       "      <td>France</td>\n",
       "      <td>0.118102</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-09</th>\n",
       "      <td>0.678827</td>\n",
       "      <td>France</td>\n",
       "      <td>0.402535</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-10</th>\n",
       "      <td>0.296832</td>\n",
       "      <td>France</td>\n",
       "      <td>0.678827</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   y country     y_lag\n",
       "ds                                    \n",
       "2000-01-01  0.870109      UK       NaN\n",
       "2000-01-02  0.496001      UK  0.870109\n",
       "2000-01-03  0.708407      UK  0.496001\n",
       "2000-01-04  0.313938      UK  0.708407\n",
       "2000-01-05  0.111558      UK  0.313938\n",
       "2000-01-06  0.883858      UK  0.111558\n",
       "2000-01-03  0.289137  France  0.883858\n",
       "2000-01-04  0.338983  France  0.289137\n",
       "2000-01-05  0.284201  France  0.338983\n",
       "2000-01-06  0.189095  France  0.284201\n",
       "2000-01-07  0.118102  France  0.189095\n",
       "2000-01-08  0.402535  France  0.118102\n",
       "2000-01-09  0.678827  France  0.402535\n",
       "2000-01-10  0.296832  France  0.678827"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Mistake in using shift for this dataset\n",
    "df[\"y_lag\"] = df[\"y\"].shift(periods=1)\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "mobile-causing",
   "metadata": {},
   "source": [
    "This is wrong as you can see the values from one timeseries have been shifted into the other."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "genuine-civilian",
   "metadata": {},
   "source": [
    "To get the correct result we want to set the index to be a datetime type and specify the frequency that we want to shift the index by and re-join to the original dataframe."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "motivated-filename",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Drop the wrong version of the lag\n",
    "df = df.drop(columns=[\"y_lag\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "apart-sellers",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>country</th>\n",
       "      <th>y</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ds</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2000-01-06</th>\n",
       "      <td>UK</td>\n",
       "      <td>0.870109</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-07</th>\n",
       "      <td>UK</td>\n",
       "      <td>0.496001</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-08</th>\n",
       "      <td>UK</td>\n",
       "      <td>0.708407</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-09</th>\n",
       "      <td>UK</td>\n",
       "      <td>0.313938</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-10</th>\n",
       "      <td>UK</td>\n",
       "      <td>0.111558</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-11</th>\n",
       "      <td>UK</td>\n",
       "      <td>0.883858</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-08</th>\n",
       "      <td>France</td>\n",
       "      <td>0.289137</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-09</th>\n",
       "      <td>France</td>\n",
       "      <td>0.338983</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-10</th>\n",
       "      <td>France</td>\n",
       "      <td>0.284201</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-11</th>\n",
       "      <td>France</td>\n",
       "      <td>0.189095</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-12</th>\n",
       "      <td>France</td>\n",
       "      <td>0.118102</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-13</th>\n",
       "      <td>France</td>\n",
       "      <td>0.402535</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-14</th>\n",
       "      <td>France</td>\n",
       "      <td>0.678827</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-15</th>\n",
       "      <td>France</td>\n",
       "      <td>0.296832</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           country         y\n",
       "ds                          \n",
       "2000-01-06      UK  0.870109\n",
       "2000-01-07      UK  0.496001\n",
       "2000-01-08      UK  0.708407\n",
       "2000-01-09      UK  0.313938\n",
       "2000-01-10      UK  0.111558\n",
       "2000-01-11      UK  0.883858\n",
       "2000-01-08  France  0.289137\n",
       "2000-01-09  France  0.338983\n",
       "2000-01-10  France  0.284201\n",
       "2000-01-11  France  0.189095\n",
       "2000-01-12  France  0.118102\n",
       "2000-01-13  France  0.402535\n",
       "2000-01-14  France  0.678827\n",
       "2000-01-15  France  0.296832"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Shift the timeseries index to get the lagged versions\n",
    "df_shift = df.loc[:, [\"country\", \"y\"]].shift(periods=5, freq=\"D\")\n",
    "df_shift"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "sharp-irrigation",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>y</th>\n",
       "      <th>country</th>\n",
       "      <th>y_lag</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ds</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2000-01-01</th>\n",
       "      <td>0.870109</td>\n",
       "      <td>UK</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-02</th>\n",
       "      <td>0.496001</td>\n",
       "      <td>UK</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-03</th>\n",
       "      <td>0.708407</td>\n",
       "      <td>UK</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-04</th>\n",
       "      <td>0.313938</td>\n",
       "      <td>UK</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-05</th>\n",
       "      <td>0.111558</td>\n",
       "      <td>UK</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-06</th>\n",
       "      <td>0.883858</td>\n",
       "      <td>UK</td>\n",
       "      <td>0.870109</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-03</th>\n",
       "      <td>0.289137</td>\n",
       "      <td>France</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-04</th>\n",
       "      <td>0.338983</td>\n",
       "      <td>France</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-05</th>\n",
       "      <td>0.284201</td>\n",
       "      <td>France</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-06</th>\n",
       "      <td>0.189095</td>\n",
       "      <td>France</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-07</th>\n",
       "      <td>0.118102</td>\n",
       "      <td>France</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-08</th>\n",
       "      <td>0.402535</td>\n",
       "      <td>France</td>\n",
       "      <td>0.289137</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-09</th>\n",
       "      <td>0.678827</td>\n",
       "      <td>France</td>\n",
       "      <td>0.338983</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-10</th>\n",
       "      <td>0.296832</td>\n",
       "      <td>France</td>\n",
       "      <td>0.284201</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   y country     y_lag\n",
       "ds                                    \n",
       "2000-01-01  0.870109      UK       NaN\n",
       "2000-01-02  0.496001      UK       NaN\n",
       "2000-01-03  0.708407      UK       NaN\n",
       "2000-01-04  0.313938      UK       NaN\n",
       "2000-01-05  0.111558      UK       NaN\n",
       "2000-01-06  0.883858      UK  0.870109\n",
       "2000-01-03  0.289137  France       NaN\n",
       "2000-01-04  0.338983  France       NaN\n",
       "2000-01-05  0.284201  France       NaN\n",
       "2000-01-06  0.189095  France       NaN\n",
       "2000-01-07  0.118102  France       NaN\n",
       "2000-01-08  0.402535  France  0.289137\n",
       "2000-01-09  0.678827  France  0.338983\n",
       "2000-01-10  0.296832  France  0.284201"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Join back to the original dataframe\n",
    "df.merge(df_shift, on=[\"ds\", \"country\"], how=\"left\", suffixes=(\"\", \"_lag\"))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ranking-sauce",
   "metadata": {},
   "source": [
    "Note: This assumed the time series were evenly spaced in time!"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.5"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
